
package com.jf.cloud.seckill.mapper;

import com.jf.cloud.seckill.dto.SeckillSkuDTO;
import com.jf.cloud.seckill.model.SeckillSku;
import com.jf.cloud.seckill.vo.SeckillSkuVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 秒杀活动sku
 *
 * @author zz
 * @date 2021-03-30 14:53:09
 */
public interface SeckillSkuMapper {

    /**
     * 根据秒杀活动skuid获取秒杀活动sku
     * 库存请不要从这里查
     * @param seckillSkuId 秒杀活动skuid
     * @return 秒杀活动sku
     */
    SeckillSkuVO getBySeckillSkuId(@Param("seckillSkuId") Long seckillSkuId);

    /**
     * 更新秒杀活动sku
     *
     * @param seckillSku 秒杀活动sku
     */
    void update(@Param("seckillSku") SeckillSku seckillSku);

    /**
     * 根据秒杀活动skuid删除秒杀活动sku
     *
     * @param seckillSkuId
     */
    void deleteById(@Param("seckillSkuId") Long seckillSkuId);

    /**
     * 根据秒杀活动id获取秒杀商品规格信息
     *
     * @param seckillId 秒杀活动id
     * @return 秒杀商品规格信息
     */
    List<SeckillSkuVO> selectListBySeckillId(@Param("seckillId") Long seckillId);

    /**
     * 批量保存秒杀活动sku
     *
     * @param seckillSkuList 秒杀活动sku
     */
    void saveBatch(@Param("seckillSkuList") List<SeckillSkuDTO> seckillSkuList);

    /**
     * 活动结束批量更新秒杀活动sku库存
     * @param seckillSkuList
     */
    void updateBatch(@Param("seckillSkuList") List<SeckillSkuDTO> seckillSkuList);

    /**
     * 更新商品秒杀库存
     *
     * @param seckillSkuId
     * @param count
     * @return
     */
    int updateStocks(@Param("seckillSkuId") Long seckillSkuId, @Param("count") Integer count);

    /**
     * 还原秒杀库存
     *
     * @param seckillSkuId 秒杀SKU id
     * @param count 库存数量
     */
    void returnStocksByOrderId(@Param("seckillSkuId") Long seckillSkuId, @Param("count") Integer count);

    /**
     * 获取指定的秒杀活动sku信息
     *
     * @param seckillId
     * @param skuId
     * @return
     */
    SeckillSkuVO getBySkuIdAndSeckillId(@Param("seckillId") Long seckillId, @Param("skuId") Long skuId);

    /**
     * 获取可能需要落库的秒杀活动
     * @return 秒杀信息
     */
    List<SeckillSkuVO> listMaybeNeedStockPlacementActivity();

    /**
     * 获取刚刚结束的秒杀活动
     * @return
     */
    List<SeckillSkuVO> listOverJustNow();

}
